package org.mfw.obj.list
{
	import org.mfw.interfaces.obj.list.IMediaListObject;

	/**
	 * MediaList Klasse. Superklasse für die Mediaobjektlisten.
	 * @author Steven Voigt
	 * @Added 01.04.09
	 * @LastUpdate 01.04.09
	 * */
	public class MediaListObject implements IMediaListObject
	{
		protected var _currentIndex:Number; //Zeigt auf ein Element
		protected var _elementArray:Array; //Array mit allen Elementen der Liste
		
		
		public function MediaListObject()
		{
			this._currentIndex=0;
			this._elementArray=new Array();
		}
	
		/**
		 * Gibt die Anzahl der Elemente in der Liste zurück
		 * */
		public function get length():Number
		{
			return this._elementArray.length;
		}
		
		
		/**
		 * Gibt ein Array mit allen Elementen in der Liste zurück
		 * */
		public function get elementArray():Array
		{
			return this._elementArray;
		}
		
		/**
		 * Gibt das Element mit dem übergebenen Index zurück
		 * */
		public function getElementByIndex(index:Number):Object
		{
			if (this.validateIndex(index)){
				return this._elementArray[index];
			} else return null;
			
		}
		/**
		 * Gibt das Element zurück auf welches aktuell verwiesen wird
		 * */
		public function get currentElement():Object
		{
			return this._elementArray[this._currentIndex];
		}
		
		
		/**
		 * Gibt das nächste Element zurück
		 * */
		public function get nextElement():Object
		{	
			if (this.validateIndex(this._currentIndex+1)){
				this._currentIndex++;
				return this.currentElement;
			}else return null;
		}
		
		/**
		 * Gibt das vorhergehende Element zurück
		 * */
		public function get prevElement():Object
		{
			if (this.validateIndex(this._currentIndex-1)){
				this._currentIndex--;
				return this.currentElement;
			} else return null;
		}
		
		/**
		 * Gibt das letzte Element zurück
		 * */
		public function get lastElement():Object
		{
			return this.getElementByIndex(this.lastIndex);
		}
		
		/**
		 * Gibt den Wert des Zeiger zurück
		 * */
		public function get currentIndex():Number
		{
			return this._currentIndex;
		}
		
		/**
		 * Legt den Wert des Zeiger fest
		 * */
		public function set currentIndex(value:Number):void
		{
			if (this.validateIndex(value)){
				this._currentIndex=value;
			}
		}
		
		/**
		 * Gibt den Index des letzten Elements zurück
		 * */
		public function get lastIndex():Number
		{
			return this.length-1;
		}
		
		/**
		 * Löscht das Element mit dem Übergebene Index
		 * */
		public function removeElementByIndex(index:Number):Object
		{
			//TODO : Muss noch implementiert werden
			return this._elementArray.slice(index,index+1);
		}
		
		/**
		 * Gibt den Wert des Zeiger zurück
		 * */
		public function addElement(element:Object):Number
		{
			this._elementArray.push(element);
			return this.lastIndex;
		}
		/**
		 * Prüft ob der übergebene Index gültig ist
		 * */
		public function validateIndex(index:Number):Boolean 
		{
			var returnValue:Boolean = false;
			if ((index>=0)&&(index<this.length)) {
				returnValue=true;
			}
			
			return returnValue;
		}
		
		
	}
}